package com.xiangge.sort;

import java.util.Arrays;

public class SortDemo1 {
    public static void main(String[] args) {
        /*
        请使用冒泡排序将{5, 12, 90, 18, 77, 76, 45, 28, 59, 72}按照从小到大顺序排好
        */
        // 首先创建数组进行冒泡排序
        int[] arr = {5, 12, 90, 18, 77, 76, 45, 28, 59, 72};
        // 使用嵌套循环，外层进行轮次循环，内层进行比较次数循环
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1; j++) {
                // 判断相邻的元素大小，将小的往前挪，大的往后挪
                if (arr[j] > arr[j+1]){
                    // 创建一个临时变量来进行交换
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
    public static void main1(String[] args) {
        /*
        请使用冒泡排序将{1,2,5,3,4}按照从小到大顺序排好
        */
        // 冒泡排序
        // 首先定义数组
        int[] arr = {1,2,5,3,4};
        // 开始冒泡：从小到大
        // 使用嵌套循环，外层循环控制冒泡的轮数,数组循环的轮数= arr.length - 1轮
        // 因为在遍历中会让arr.length减一 -->arr.length-1，用来代表索引最大范围，
        // 所以冒泡轮数就是arr.length-1-1,即arr.length-2
        for (int i = 0; i < arr.length-1; i++) {    // i <arr.length-1 == i <= arr.length-2
            // 内层循环控制每一轮比较的次数：= arr.length - 1次
            // 于外层循环同理，也就是arr.length-2
            // 每一轮比较后一定会将最大的元素排到最后，优化比较次数的话就可以减去轮次（因为轮一次会定位一个最大值到数组后）
            for (int j = 0; j < arr.length - 1; j++) {  //// j <arr.length-1 == j <= arr.length-2
                // 让数组中相邻元素比较
                if (arr[j] > arr[j+1]){
                    // 定义临时变量来进行交换
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}
